package cn.imvc.app.models;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cloopen.rest.sdk.CCPRestSmsSDK;

import cn.imvc.app.commons.SMSDomain;

@Service
public class SMSModelImpl implements SMSModel {

	private Logger logger = Logger.getLogger(SMSModelImpl.class);
	
	CCPRestSmsSDK restAPI;

	@Autowired
	SMSDomain smsDomain;

	
	public Map<String, String> sendMessageCommon(String mobile, String code,List<String> values) {
		HashMap<String, Object> map = null;
		CCPRestSmsSDK restAPI = getSmsSDK();
		String[] params=new String[values.size()];
		for(int i=0;i<values.size();i++){
			params[i]=values.get(i);
		}
		map = restAPI.sendTemplateSMS(mobile, code, params);
		return getResult(map, mobile);
	}


	private Map<String, String> getResult(Map<String, Object> map, String mobile) {
		Map<String, String> result = new HashMap<String, String>();
		String statusCode = (String) map.get("statusCode");
		if ("000000".equals(statusCode)) {
			result.put("code", "1");
			result.put("msg", "发送成功");
		} else if("112314,160039,160040,160041,160022".indexOf(statusCode) > -1){
			logger.error("手机号：" + mobile + "，错误码=" + statusCode + " 错误信息= " + map.get("statusMsg"));
			result.put("code", "0");
			result.put("msg", "短信下发超过当日发送限制");
		} else {
			// 异常返回输出错误码和错误信息
			logger.error("手机号：" + mobile + "，错误码=" + statusCode + " 错误信息= " + map.get("statusMsg"));
			result.put("code", "0");
			result.put("msg", "发送失败");
		}
		return result;
	}

	public CCPRestSmsSDK getSmsSDK() {
		
		if (restAPI!=null){
			return restAPI;
		}
		// 初始化SDK
		restAPI = new CCPRestSmsSDK();

		// ******************************注释*********************************************
		// *初始化服务器地址和端口 *
		// *沙盒环境（用于应用开发调试）：restAPI.init("sandboxapp.cloopen.com", "8883");*
		// *生产环境（用户应用上线使用）：restAPI.init("app.cloopen.com", "8883"); *
		// *******************************************************************************
		restAPI.init(smsDomain.getServerIP(), smsDomain.getServerPort());

		// ******************************注释*********************************************
		// *初始化主帐号和主帐号令牌,对应官网开发者主账号下的ACCOUNT SID和AUTH TOKEN *
		// *ACOUNT SID和AUTH TOKEN在登陆官网后，在“应用-管理控制台”中查看开发者主账号获取*
		// *参数顺序：第一个参数是ACOUNT SID，第二个参数是AUTH TOKEN。 *
		// *******************************************************************************
		restAPI.setAccount(smsDomain.getAccountSid(), smsDomain.getAuthToken());

		// ******************************注释*********************************************
		// *初始化应用ID *
		// *测试开发可使用“测试Demo”的APP ID，正式上线需要使用自己创建的应用的App ID *
		// *应用ID的获取：登陆官网，在“应用-应用列表”，点击应用名称，看应用详情获取APP ID*
		// *******************************************************************************
		restAPI.setAppId(smsDomain.getAppId());
		return restAPI;
	}

}
